#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<graphics.h>
#include<math.h>

	int xArray[500];
	int yArray[500];//储存每个圆的坐标
	int rArray[500];//储存每个圆的半径
	int rmin=8;
	int rmax=50;//圆的最大最小半径
	int num=0;//已画圆的数量

void draw(int x,int y,int r)
{
	while(r>0)
	{
		float h=rand()%360;
		COLORREF color=HSVtoRGB(h,0.6,0.8);
		setlinecolor(RGB(255,255,255));
		setfillcolor(color);
		fillcircle(x,y,r);
		r=r-5;
	}
}
int judge(int x,int y,int r)//判断新生成的圆是否重叠
{
	int i=0;
	while(i<num)//对已画的圆遍历
	{
		int dis=(xArray[i]-x)*(xArray[i]-x)+(yArray[i]-y)*(yArray[i]-y);//两点间距离的平方
		int rr=(r+rArray[i])*(r+rArray[i]);//半径之和的平方
		if(rr>=dis)
			return 0;//如果与已有的任何一个圆相交,返回0
		i++;
	}
	return 1;//否则该圆满足要求
}
int main()
{
	int x,y,r;
	int width=600,height=600;
	initgraph(width,height);
	setbkcolor(RGB(255,255,255));//白色背景
	cleardevice();
	srand(time(0));//随机种子函数
	while(num<500)
	{
		x=rand()%width;
		y=rand()%height;
		r=rand()%(rmax-rmin)+rmin;//取余使生成在范围内的随机坐标和半径
		if(judge(x,y,r)==1)
		{
			while(1)
			{
				r++;
				if(judge(x,y,r)==1&&r<rmax)
					continue;
				else
					break;
			}
			xArray[num]=x;
			yArray[num]=y;
			rArray[num]=r;
			num++;
			draw(x,y,r);
			Sleep(100);
		}
	}
	_getch();
	return 0;
}